home *** CD-ROM | disk | FTP | other *** search
- unit Traps;
-
- {****************************************************************************
- * *
- * Einige Routinen, die Returncodes von Windows-Funktionen auswerten. *
- * (Hauptanwendung: "Sicherheitsnetz" während Programmentwicklung.) *
- * *
- * Bei den eventuell angezeigten Fehleradressen ist CS natürlich nur *
- * beim Lauf unter dem Debugger aussagekräftig; bei Borlands "Find *
- * Error" muß man stattdessen die laufende Nummer des Segments eingeben. *
- * *
- ****--------------------------------------------------------------------*****
- * *
- * Compiler: TPWIN 1.5 *
- * *
- ****--------------------------------------------------------------------*****
- * *
- * Rev. 1.0 11.2.92 MK IR *
- * Rev. 1.1 11.8.92 MK Einige Meldungstexte verändert *
- * *
- ****************************************************************************}
-
- interface
-
- uses Winprocs, Wintypes;
-
- function TestHandle (TheHandle: THandle): THandle;
- procedure TestBool (TheValue: bool);
-
- implementation
-
- {****************************************************************************
- * *
- * T e s t H a n d l e *
- * *
- * AUFGABE: Überprüft ein Handle; *
- * bricht mit Returncode 10 ab, falls Handle 0 *
- * *
- * EINGABE: TheHandle = zu überprüfendes Handle *
- * *
- * HINWEIS: Das Programm wird brutal über HALT gestoppt: kein Aufräumen! *
- * *
- ****************************************************************************}
-
- function TestHandle (TheHandle: THandle): THandle;
-
- var retadr: array [0..1] of word;
- rcs, rip: word;
- OutText: array [0..50] of char;
-
- begin
- if (TheHandle <> 0) then { ok }
- TestHandle := TheHandle
- else
- begin
- asm
- mov ax,[bp+4] { hole Returnadresse }
- mov rcs,ax
- mov ax,[bp+2]
- mov rip,ax
- end; { asm }
- retadr [0] := rcs;
- retadr [1] := rip-5; { = Offset des Calls }
-
- wvsprintf (OutText, 'Handle = 0 at address %X:%X', retadr);
- MessageBox (0, OutText, 'Fatal Error', MB_IconStop or MB_OK);
-
- halt (10);
- end; { else }
-
- end; { TestHandle }
-
- {****************************************************************************
- * *
- * T e s t B o o l *
- * *
- * AUFGABE: Überprüft einen logischen Wert; *
- * bricht mit Returncode 11 ab, falls Wert = false *
- * *
- * EINGABE: TheValue = zu überprüfender logischer Wert *
- * *
- * HINWEIS: Das Programm wird brutal über HALT gestoppt: kein Aufräumen! *
- * *
- ****************************************************************************}
-
- procedure TestBool (TheValue: bool);
-
- var retadr: array [0..1] of word;
- rcs, rip: word;
- OutText: array [0..50] of char;
-
- begin
- if (TheValue = false) then
- begin
- asm
- mov ax,[bp+4] { hole Returnadresse }
- mov rcs,ax
- mov ax,[bp+2]
- mov rip,ax
- end; { asm }
- retadr [0] := rcs;
- retadr [1] := rip-5; { = Offset des Calls }
-
- wvsprintf (OutText, 'API-Function failed at address %X:%X', retadr);
- MessageBox (0, OutText, 'Fatal Error', MB_IconStop or MB_OK);
-
- halt (11);
- end; { if false }
-
- end; { TestBool }
-
-
- begin
- end.
-